﻿#define _CRT_SECURE_NO_WARNINGS 1
//请你来实现一个 myAtoi(string s) 函数，使其能将字符串转换成一个 32 位有符号整数。
//
//函数 myAtoi(string s) 的算法如下：
//
//空格：读入字符串并丢弃无用的前导空格（" "）
//符号：检查下一个字符（假设还未到字符末尾）为 '-' 还是 '+'。如果两者都不存在，则假定结果为正。
//转换：通过跳过前置零来读取该整数，直到遇到非数字字符或到达字符串的结尾。如果没有读取数字，则结果为0。
//舍入：如果整数数超过 32 位有符号整数范围[−231, 231 − 1] ，需要截断这个整数，使其保持在这个范围内。具体来说，小于 −231 的整数应该被舍入为 −231 ，大于 231 − 1 的整数应该被舍入为 231 − 1 。
//返回整数作为最终结果。
//示例 1：
//
//输入：s = " -042"
//输出： - 42
//解释：
//第 1 步："   -042"（读入前导空格，但忽视掉）
//			   ^
//第 2 步："   -042"（读入 '-' 字符，所以结果应该是负数）
//              ^
//第 3 步："   -042"（读入 "042"，在结果中忽略前导零）
//                ^
//示例 2：
//
//输入：s = "words and 987"
//输出：0
//解释：
//读取在第一个非数字字符“w”处停止。

#include<iostream>
#include<cctype>

using namespace std;

class Solution
{
public:
	int myAtoi(string s)
	{
		if (s.empty())
		{
			return 0;
		}
		int i = 0;
		int sign = 1;
		int n = s.size();
		int ans = 0;
		while (i < n && s[i] == ' ')
		{
			++i;
		}
		if (i < n && (s[i] == '-' || s[i] == '+'))
		{
			sign = s[i] == '-' ? -1 : 1;
			++i;
		}
		while (i < n && isdigit(s[i]))
		{
			int digit = s[i] - '0';
			if (ans > (INT_MAX - digit) / 10)
			{
				return sign == 1 ? INT_MAX : INT_MIN;
			}
			ans = ans * 10 + digit;
			++i;
		}
		return sign * ans;
	}
};
int main()
{
	string str;
	cin >> str;
	Solution sol;
	cout << sol.myAtoi(str) << endl;
	return 0;
}